/*
 *  serveur.h
 *  pire2pireV1
 *
 *  Created by jihed kamkoum on 04/05/10.
 *  Copyright 2010 ENSEIRB. All rights reserved.
 *
 */
#ifndef SERVEUR_H_
#define SERVEUR_H_
#include "../common/common.h"
#include "../listes/listeClients.h"
#include "../listes/filelist.h"
#include "../protocole/protocole.h"
#include "../common/scheduler.h"
typedef struct _cmdrecv{
	int sock;
	int semid;
	const char * cmd;
	Liste * listeClients;
	pthread_mutex_t * clientTableAccess;
	filelist_t * listeFichiers;
	pthread_mutex_t * fileTableAccess;
}cmdrecv;
/*
 *Ouverture de la socket serveur en mode TCP
 */
void create_serveur_sock(SOCKET * sock);
/*
 *Configuration de la socket serveur 
 */
void bind_serveur(SOCKET * sock ,char * ip,int port,char * path,int semid,Liste * listeClients,filelist_t * listeFichiers,int fdpipe,pthread_mutex_t * clientsTableAccess,pthread_mutex_t * fileTableAccess,pthread_mutex_t * trafficTableAccess);
/*
 * Traitement des requêtes clients.
 */
void deal_with_data(int listnum,int * connectlist,int semid,Liste * listeClients,filelist_t * listeFichiers,pthread_mutex_t *clientTableAccess,pthread_mutex_t * fileTableAccess);
/*
 *thread permettant le traitement des requêtes clients
 */
void * f_thread_serveur(cmdrecv * recived);
/*
 *Accepte les nouvelles connections des clients.
 *Vérifie les requêtes clients
 */
void read_socks(int sock,fd_set *socks,int * connectlist,int semid,Liste * listeClients,filelist_t * listeFichiers,pthread_mutex_t *clientTableAccess,pthread_mutex_t * fileTableAccess);
/*
 *Accepte les nouvelles connections
 */
void handle_new_connection(int sock,int *connectlist,Liste * listeClients,pthread_mutex_t *clientTableAccess);
/*
 *La construction du buffer contenant les sockets
 */
void build_select_list(int sock,fd_set* socks,int * connectlist,int* highsock ,int fdpipe);
/*
 *Modifie le flag du descripteur en mode non bloquant
 */

return_t cmd_handler();
void setnonblocking(int sock);
void sock_puts(int sock,const char* message);
const char * sock_take(int sock);
void timeout_handler(int *connectlist,Liste * listeClients, float time_out);
void cmd_neighbourhoud_handler(cmdrecv* recived);
#endif /*SERVEUR_H_*/